/**
 * @name        router-custom.ts
 * @author      shenyc
 * @date        2020-05-06 - ?
 * @copyright   Copy right (c) shenyc (shenyczz@163.com).
 *              All rights reserved.
 *
 ******************************************************************************/
// {{@@@}}
"use strict"
// ----------------------------------------------------------------------------
import { type RouteRecordRaw, createRouter, createWebHistory, createWebHashHistory } from "vue-router"
import { hookProgress } from "@/hooks"
import routers from "./router-all"
// ----------------------------------------------------------------------------
// console.log(`🍍 [router] import.meta.env.BASE_URL = ${import.meta.env.BASE_URL}`);
const { start, done } = hookProgress()
const routerMode = {
    hash: () => createWebHashHistory(),
    history: () => createWebHistory(),
}
// ----------------------------------------------------------------------------
/**
 *
 */
export const router = createRouter({
    history: createWebHistory(import.meta.env.BASE_URL),
    strict: false, // 尾部斜杠
    sensitive: false, // 大小写敏感
    routes: routers,
    scrollBehavior: (to, from, savedPosition) => {
        if (savedPosition) {
            return savedPosition
        } else {
            return { left: 0, top: 0 }
        }
    },
})

export default router
// ----------------------------------------------------------------------------
/**
 * [路由导航守卫完整的导航解析流程]
 *
 * 01.导航被触发。
 * 02.在失活的组件里调用 beforeRouteLeave 守卫
 * 03.调用全局的 beforeEach 守卫。
 * 04.在重用的组件里调用 beforeRouteUpdate 守卫(2.2+)
 * 05.在路由配置里调用 beforeEnter
 * 06.解析异步路由组件。
 * 07.在被激活的组件里调用 beforeRouteEnter。
 * 08.调用全局的 beforeResolve 守卫(2.5+)。
 * 09.导航被确认。
 * 10.调用全局的 afterEach 钩子。
 * 11.触发 DOM 更新。
 * 12.调用 beforeRouteEnter 守卫中传给 next 的回调函数，创建好的组件实例会作为回调函数的参数传入。
 */
// router.beforeEach(async (to, from, next) => {})
// router.beforeResolve(async (to, from, next) => {})
router.afterEach(async (to, from, failure) => {
    console.log(`from `)
    console.log(from)
    console.log(`to `)
    console.log(to)
})
router.onError(async (error, to, from) => {})
// ----------------------------------------------------------------------------
// {{@@@}}
